package com.yuliang.aicodemother.ai;

import com.yuliang.aicodemother.ai.modal.HtmlCodeResult;
import com.yuliang.aicodemother.ai.modal.MultiFileCodeResult;
import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.UserMessage;
import reactor.core.publisher.Flux;

public interface AiCodeGeneratorService {
        /**
         * 生成 HTML 代码
         *
         * @param userMessage 用户消息
         * @return 生成的代码结果
         */
        @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
        HtmlCodeResult generateHtmlCode(@MemoryId int memoryId,@UserMessage String userMessage);

        /**
         * 生成多文件代码
         *
         * @param userMessage 用户消息
         * @return 生成的代码结果
         */
        @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
        MultiFileCodeResult generateMultiFileCode(String userMessage);

        /**
         * 生成 HTML 代码（流式）
         *
         * @param userMessage 用户消息
         * @return 生成的代码结果
         */
        @SystemMessage(fromResource = "prompt/codegen-html-system-prompt.txt")
        Flux<String> generateHtmlCodeStream(String userMessage);

        /**
         * 生成多文件代码（流式）
         *
         * @param userMessage 用户消息
         * @return 生成的代码结果
         */
        @SystemMessage(fromResource = "prompt/codegen-multi-file-system-prompt.txt")
        Flux<String> generateMultiFileCodeStream(String userMessage);

        /**
         * 生成 Vue 项目代码（流式）
         *
         * @param userMessage 用户消息
         * @return 生成过程的流式响应
         */
        @SystemMessage(fromResource = "prompt/codegen-vue-project-system-prompt.txt")
        TokenStream generateVueProjectCodeStream(@MemoryId long appId, @UserMessage String userMessage);


}
